package main

import "fmt"

type SayH interface {
	say()
}

// China 结构体中国人
type China struct {
	Name string
}

// Ame 结构体美国人
type Ame struct {
	Name string
}

func (c *China) say() {
	fmt.Println("你好", c.Name)
}

// 只有中国人有吃
func (c *China) eat() {
	fmt.Println(c.Name, "eat ")
}

func (a *Ame) say() {
	fmt.Println("hello", a.Name)
}

func hello(say SayH) {
	say.say()
	switch say.(type) { // type为go的关键字，是固定写法。 判断say类型
	case *China:
		ch := say.(*China)
		ch.eat()
	case *Ame:
		ame := say.(*Ame)
		ame.say()
	}

}
func main() {
	a := Ame{"rose"}
	c := China{"小明"}
	fmt.Println(a, c)
	hello(&c)
	hello(&a)

}
